package com.yeren.thread.synchronizedAndLock;
/**
 * 1.有效的减少同步范围可以提高并发效率
 * 2.多线程看到的锁对象必须是同一个对象，否则起不到作用
 * 3.如果Synchronized块在一个非静态方法中，那么通常锁对象写的是this 
 */
public class SyncDemo2 {
	public static void main(String[] args) {
		final SyncDemo2 demo2=new SyncDemo2();
		Thread t1=new Thread(){
			public void run(){
				demo2.buy(getName());
			}
		};
		
		Thread t2=new Thread(){
			public void run(){
				demo2.buy(getName());
			}
		};
		
		Thread t3=new Thread(){
			public void run(){
				demo2.buy(getName());
			}
		};
		
		t1.start();
		t2.start();
		t3.start();
		
	}
	
	public void buy(String name){
		System.out.println(name+"正在挑衣服");
		System.out.println(name+"衣服挑完了");
		synchronized (this) {
			System.out.println(name+"准备试衣服");
		}
		System.out.println(name+"结账");
	}
}
